package com.hongyi.system.service;


import com.hongyi.common.mybatis.page.PageData;
import com.hongyi.common.mybatis.page.PageQuery;
import com.hongyi.system.domain.SysRole;
import com.hongyi.system.domain.dto.SysRoleDto;
import com.hongyi.system.domain.vo.SysRoleVo;

import java.util.List;
import java.util.Set;

public interface ISysRoleService {

    /**
     * 获取角色数据权限
     *
     * @param userId  用户id
     * @return 角色权限信息
     */
    Set<String> getRolePermission(Long userId);

    /**
     * 获取角色分页数据
     *
     * @param sysRoleDto 角色对象
     * @param pageQuery 分页查询条件
     * @return 分页角色数据集合信息
     */
    PageData<SysRoleVo> selectRoleList(SysRoleDto sysRoleDto, PageQuery pageQuery);

    /**
     * 获取角色分数据列表
     *
     * @param sysRoleDto 角色对象
     * @return 角色数据集合信息
     */
    List<SysRoleVo> selectRoleList(SysRoleDto sysRoleDto);

    /**
     * 通过角色ID查询角色
     *
     * @param roleId 角色ID
     * @return 角色对象信息
     */
    SysRoleVo selectRoleById(Long roleId);

    /**
     * 校验角色名称是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    String checkRoleNameUnique(SysRole role);

    /**
     * 校验角色权限是否唯一
     *
     * @param role 角色信息
     * @return 结果
     */
    String checkRoleKeyUnique(SysRole role);

    /**
     * 新增保存角色信息
     *
     * @param role 角色信息
     * @return 结果
     */
    int insertRole(SysRole role);

    /**
     * 修改保存角色信息
     *
     * @param role 角色对象
     * @return 结果
     */
    int updateRole(SysRole role);

    /**
     * 清除缓存角色信息
     *
     * @param roleId 角色主键
     */
    void cleanOnlineUserByRole(Long roleId);

    /**
     * 校验角色是否允许操作
     *
     * @param role 角色信息
     */
    void checkRoleAllowed(SysRole role);

    /**
     * 批量删除角色信息
     *
     * @param roleIds 需要删除的角色ID
     * @return 结果
     */
    int deleteRoleByIds(Long[] roleIds);

    /**
     * 修改角色状态
     *
     * @param sysRoleDto 角色信息
     * @return 结果
     */
    Boolean updateRoleStatus(SysRoleDto sysRoleDto);

    /**
     * 修改数据权限信息
     *
     * @param role 角色信息
     * @return 结果
     */
    int authDataScope(SysRole role);

}
